package seismosurfer.update;

//
// import java.sql.*;
// import java.util.Calendar;
// import java.util.StringTokenizer;
//
// import com.bbn.openmap.util.Debug;
//
// import seismosurfer.data.CatalogData;
// import seismosurfer.database.CatalogDAO;
// import seismosurfer.database.DBUtil;
// import seismosurfer.util.Task;
// import seismosurfer.util.SeismoException;
// import seismosurfer.data.*;
import seismosurfer.data.constants.UpdateConstants;

/**
 * This class was used to transfer data
 * from the GI-NOA Access db to Oracle.
 * If it`s needed again should be rewritten...
 *
 */
public class Access2Oracle implements UpdateConstants {
    //
    // protected static final String SELECT_EVENTS =
    // " SELECT codee, obsyes, year, month, day, ortime, late, lone, depth, mag
    // FROM events ";
    //
    // protected static final String SELECT_MACROSEISMIC =
    // " SELECT codes, int, inta, [ep dist], hypdist, azimuth " +
    // " FROM mac_obs WHERE codee = ? ";
    //
    // protected static final String INSERT_QUAKE =
    // " INSERT INTO quake " +
    // " VALUES " +
    // " (QUAKE_SEQ.NEXTVAL, ?, ?, " +
    // " MDSYS.SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE( ?, ?,NULL), NULL,
    // NULL), " +
    // " ?, ?, default, default, default, default, default, default)";
    //
    // protected static final String INSERT_MAG =
    // " INSERT INTO mag " +
    // " VALUES " +
    // " (MAG_SEQ.NEXTVAL, QUAKE_SEQ.CURRVAL, ?, ?, ?, " +
    // " default, default, default, default)";
    //
    // protected static final String INSERT_MACRO =
    // " INSERT INTO macroseismic VALUES " +
    // " ( ?, QUAKE_SEQ.CURRVAL, ?, ?, ?, ?, ?, " +
    // " MACROSEQ.NEXTVAL, default, default, ? ) ";
    //
    // private String codee;
    //
    // private String obsyes;
    // private int year;
    // private String month;
    // private int day;
    // private String ortime;
    // private double late;
    // private double lone;
    // private double depth;
    // private double mag;
    //
    // private String codes;
    // private String INT;
    // private double INTA;
    // private double epdist;
    // private double hypdist;
    // private double azimuth;
    //
    // private Connection accessConn;
    // private Connection oracleConn;
    //
    // private PreparedStatement eventsStmt;
    // private PreparedStatement macroStmt;
    // private PreparedStatement quakeORCLStmt;
    // private PreparedStatement macroORCLStmt;
    //
    // private ResultSet eventsRS;
    // private ResultSet macroRS;
    //
    // private DBUtil dbUtil;
    //
    // private CatalogDAO catInfo;
    // private CatalogData catData;
    //
    // private CheckQuake chkQuake;
    //
    // static boolean available = true;
    //
    // protected Access2Oracle(String catalogName) {
    //
    // try {
    //
    // chkQuake = new CheckQuake();
    //
    // catInfo = new CatalogDAO();
    //
    // catData = catInfo.getCatalogData(catalogName);
    //
    // if (Debug.debugging("access")) {
    // Debug.output("Catalog Name requested :" + catalogName);
    // Debug.output("Catalog Name from DB:" + catData.getCatalogName());
    // Debug.output("Catalog ID :" + catData.getCatalogID());
    // }
    //
    // dbUtil = new DBUtil();
    // oracleConn = dbUtil.getDBConnection();
    //
    // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    // String sourceURL = "jdbc:odbc:macro";
    // accessConn = DriverManager.getConnection(sourceURL);
    //
    // }
    // catch (ClassNotFoundException e) {
    // Debug.error(e.getMessage());
    // throw new SeismoException(e);
    // }
    // catch (SQLException e) {
    // Debug.error(e.getMessage());
    // System.out.println(e.getErrorCode());
    // System.out.println(e.getNextException());
    // System.out.println(e.getSQLState());
    // e.printStackTrace();
    //
    // throw new SeismoException(e);
    // }
    //
    // }
    //
    // private static Access2Oracle access2orcl;
    //
    // public static Access2Oracle getInstance(String catalogName) {
    // if (access2orcl == null) {
    // access2orcl = new Access2Oracle(catalogName);
    // }
    // return access2orcl;
    // }
    //
    // public boolean update() throws NotAvailableException {
    //
    // if (!available) {
    // throw new NotAvailableException
    // ("Database is being updated. Please try again later.");
    // }
    // else {
    // available = false;
    // }
    //
    // try {
    //
    // eventsStmt = accessConn.prepareStatement(SELECT_EVENTS);
    //
    // eventsRS = eventsStmt.executeQuery();
    //
    // int count = 0;
    // while (eventsRS.next()) {
    //
    // if (Debug.debugging("access")) {
    // Debug.output(String.valueOf(++count));
    // }
    //
    // //Get data from the EVENTS table
    // this.codee = eventsRS.getString(1);
    //
    // this.obsyes = eventsRS.getString(2);
    //
    // this.year = eventsRS.getInt(3);
    // this.month = eventsRS.getString(4);
    // this.day = eventsRS.getInt(5);
    // this.ortime = eventsRS.getString(6);
    //
    // this.late = eventsRS.getDouble(7);
    // this.lone = eventsRS.getDouble(8);
    //
    // this.depth = eventsRS.getDouble(9);
    //
    // this.mag = eventsRS.getDouble(10);
    //
    // if (Debug.debugging("access")) {
    // Debug.output("codee :" + codee + "\n" +
    // "obsyes :" + obsyes + "\n" +
    // "year :" + year + "\n" +
    // "month :" + month + "\n" +
    // "day :" + day + "\n" +
    // "ortime :" + ortime + "\n" +
    // "late :" + late + "\n" +
    // "lone :" + lone + "\n" +
    // "depth :" + depth + "\n" +
    // "mag :" + mag);
    // }
    //
    // //Begin Transaction
    // oracleConn.setAutoCommit(false);
    //
    // if ( (obsyes == null) || (obsyes.trim().length() == 0)) {
    // insertQUAKE_MAG(UpdateConstants.HAS_NOT_MACRO);
    // }
    // else if (this.obsyes.trim().equals("*")) {
    // insertQUAKE_MAG(UpdateConstants.HAS_MACRO);
    // insertMACROSEISMIC();
    // }
    //
    // //End Transaction
    // oracleConn.commit();
    //
    // }
    //
    // eventsRS.close();
    // eventsStmt.close();
    //
    // dbUtil.releaseDBConnection();
    // if (oracleConn != null) {
    // oracleConn.close();
    //
    // }
    // if (accessConn != null) {
    // accessConn.close();
    //
    // }
    // available = true;
    //
    // return true;
    // }
    // catch (SQLException e) {
    // Debug.error(e.getMessage());
    //
    // try {
    // oracleConn.rollback();
    // }
    // catch (SQLException ex) {
    // Debug.error(ex.getMessage());
    // throw new SeismoException(ex);
    // }
    //
    // throw new SeismoException(e);
    //
    // }
    // }
    //
    // private void insertMACROSEISMIC() {
    //
    // try {
    //
    // macroStmt = accessConn.prepareStatement(SELECT_MACROSEISMIC);
    // macroStmt.setString(1, this.codee);
    //
    // macroRS = macroStmt.executeQuery();
    //
    // //Prepare Oracle to insert MACRO
    // macroORCLStmt =
    // oracleConn.prepareStatement(INSERT_MACRO);
    //
    // while (macroRS.next()) {
    //
    // this.codes = macroRS.getString(1);
    // this.INT = macroRS.getString(2);
    // this.INTA = macroRS.getDouble(3);
    // this.epdist = macroRS.getDouble(4);
    // this.hypdist = macroRS.getDouble(5);
    // this.azimuth = macroRS.getDouble(6);
    //
    // macroORCLStmt.setString(1, codes);
    // macroORCLStmt.setDouble(2, INTA);
    // macroORCLStmt.setString(3, INT);
    // macroORCLStmt.setDouble(4, epdist);
    // macroORCLStmt.setDouble(5, hypdist);
    // macroORCLStmt.setDouble(6, azimuth);
    // macroORCLStmt.setInt(7, this.catData.getCatalogID());
    //
    // macroORCLStmt.executeUpdate();
    //
    // }
    //
    // macroRS.close();
    // macroStmt.close();
    //
    // macroORCLStmt.close();
    // }
    // catch (SQLException e) {
    // Debug.error(e.getMessage());
    // throw new SeismoException(e);
    // }
    //
    // }
    //
    // private void insertQUAKE_MAG(int has_macro) {
    //
    // try {
    //
    // long time = getTime(this.year, this.month, this.day, this.ortime);
    // Timestamp dateTime = new Timestamp(time);
    //
    // //We check for duplicates, but this record will be inserted anyway
    // //because Access DB has the highest priority
    // chkQuake.checkQuake(dateTime, lone, late, this.catData.getCatalogID(),
    // this.catInfo);
    //
    // // Insert the new quake data into the QUAKE table
    // quakeORCLStmt = oracleConn.prepareStatement(Access2Oracle.INSERT_QUAKE);
    //
    // quakeORCLStmt.setInt(1, has_macro);
    // quakeORCLStmt.setTimestamp(2, dateTime);
    // quakeORCLStmt.setDouble(3, this.lone);
    // quakeORCLStmt.setDouble(4, this.late);
    // quakeORCLStmt.setDouble(5, this.depth);
    // quakeORCLStmt.setInt(6, this.catData.getCatalogID());
    //
    // quakeORCLStmt.executeUpdate();
    //
    // quakeORCLStmt.close();
    // quakeORCLStmt = null;
    //
    // //Insert the new magnitude data into the MAG table
    // quakeORCLStmt = oracleConn.prepareStatement(Access2Oracle.INSERT_MAG);
    //
    // quakeORCLStmt.setDouble(1, this.mag);
    // quakeORCLStmt.setString(2, UpdateConstants.MS_MAGNITUDE);
    // quakeORCLStmt.setInt(3, UpdateConstants.NOT_CALCULATED);
    //
    // quakeORCLStmt.executeUpdate();
    //
    // //Calculate and Insert ML Magnitude
    // quakeORCLStmt.setDouble(1, mag - 0.5);
    // quakeORCLStmt.setString(2, UpdateConstants.ML_MAGNITUDE);
    // quakeORCLStmt.setInt(3, UpdateConstants.CALCULATED);
    //
    // quakeORCLStmt.executeUpdate();
    //
    // quakeORCLStmt.close();
    // quakeORCLStmt = null;
    // }
    // catch (SQLException e) {
    // Debug.error(e.getMessage());
    // throw new SeismoException(e);
    // }
    // }
    //
    // protected long getTime(int year, String month, int day, String ortime) {
    //
    // int hour = 0;
    // int minute = 0;
    // int second = 0;
    //
    // int mn = 0;
    // int i;
    //
    // int MonNamesSize = 12;
    // String[] MonNames = {
    // "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL",
    // "AUG", "SEP", "OCT", "NOV", "DEC"};
    //
    // boolean correct = false;
    // for (i = 0; i < MonNamesSize; i++) {
    // if (month.equals(MonNames[i])) {
    // mn = i;
    // correct = true;
    // break;
    // }
    // }
    //
    // //Make sure data are in the expected format
    // if (!correct) {
    // Debug.error("Data are not in the expected format.");
    // return 0;
    // }
    //
    // StringTokenizer st = new StringTokenizer(ortime, ":");
    // if (st.countTokens() == 3) {
    // hour = Integer.parseInt(st.nextToken());
    // minute = Integer.parseInt(st.nextToken());
    // second = Math.round(Float.parseFloat(st.nextToken()));
    // }
    // else {
    // Debug.error("Error when analyzing ORTIME field from EVENTS table");
    // return 0;
    // }
    //
    // Calendar tempCal = Calendar.getInstance();
    // tempCal.setTimeInMillis(0);
    //
    // tempCal.set(year, mn, day, hour, minute, second);
    //
    // java.util.Date myDate = tempCal.getTime();
    // return myDate.getTime();
    //
    // }
    //
    // public void finalize() {
    //
    // try{
    // // Close the connection to the database
    // dbUtil.closeDBConnection();
    // super.finalize();
    // }
    // catch(Throwable e){
    // System.out.println
    // ("Throwable in UpdateMacro.finalize() " + e.getMessage());
    // e.printStackTrace();
    // }
    //
    // }
    //
}
